package com.changgou.controller;

import com.changgou.entity.Page;
import com.changgou.entity.Result;
import com.changgou.entity.StatusCode;
import com.changgou.order.feign.CartFeign;
import com.changgou.search.pojo.SkuInfo;
import com.changgou.service.SearchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.Map;
import java.util.Set;

@Controller
@RequestMapping("/search")
public class SearchController {
	@Autowired
	private SearchService searchService;
	@Autowired
	private CartFeign cartFeign;


	@GetMapping("/list")
	public String list(@RequestParam Map<String,String> searchMap, Model model){
		this.handlerSearchMp(searchMap);
		Map resultMap = searchService.search(searchMap);
		model.addAttribute("result",resultMap);
		model.addAttribute("searchMap",searchMap);
		//封装分页数据并返回
		Page<SkuInfo> page = new Page<SkuInfo>(
			Long.parseLong(String.valueOf(resultMap.get("total"))),
			Integer.parseInt(String.valueOf(resultMap.get("pageNum"))),
			Page.pageSize
		);
		model.addAttribute("page",page);
		//拼装url
		StringBuilder url = new StringBuilder("/search/list");
		if(searchMap!=null&&searchMap.size()>0){
			url.append("?");
			for (String paramKey : searchMap.keySet()) {
				if(!"sortRule".equals(paramKey)&&!"sortField".equals(paramKey)&&!"pageNum".equals(paramKey)){
					url.append(paramKey).append("=").append(searchMap.get(paramKey)).append("&");
				}
			}
			String urlString = url.toString();
			urlString = urlString.substring(0,urlString.length()-1);
			model.addAttribute("url",urlString);
		}else{
			model.addAttribute("url",url);

		}
		return "search";
	}

	@GetMapping
	@ResponseBody
	public Map search(@RequestParam Map<String,String> searchMap){
		//特殊符号处理
		handlerSearchMp(searchMap);
		Map searchResult = searchService.search(searchMap);
		return searchResult;
	}


	private void handlerSearchMp(Map<String, String> searchMap) {
		if(null != searchMap){
			Set<Map.Entry<String, String>> entries = searchMap.entrySet();
			for (Map.Entry<String, String> entry : entries) {
				if(entry.getKey().startsWith("spec_")){
					searchMap.put(entry.getKey(),entry.getValue().replace("+","%2B"));
				}
			}
		}
	}
	@PostMapping("/addfootmark")
	public Result addMyFootMark(String skuId){
		cartFeign.addMyFootMark(skuId);
		return new Result(true,StatusCode.OK,"添加足迹成功");
	}
}
